闲扯
听说这题是分层图板子题??
蒟蒻表示没学过啊,但是感觉直接拆点就可以了啊 $qwq$
不是和 $NOI2019\ D1\ T1$ 一毛一样吗(雾)其实是由于那道题数据过水
Solution
光看题面,已经很明确的说明了要求最短路,但是有一个附加条件,可以有 $k$ 次乘坐航班不要钱这种好事我咋遇不到呢。
再看数据范围, $N$ 很小,只有 $10^4$ ; $k$ 也很小,只有 $10$ 。
看到这里,应该就很清晰了,我们把每一个点拆开,拆成 $11$ 个点,分别表示免费乘坐了 $0\dots k$ 次,到这个点的最小距离。一共有 $10^5$ 个点,是一个十分正常的最短路的数据范围这个看着舒服多了。
然后考虑转移。
对于第 $i$ 个城市,免费乘坐 $j$ 次的最短距离 $dis_{i,j}=Min(Min(dis_{u,j-1}),Min(dis_u,j+w_{u,i}))$ 。(其中 $u!=i$ )
然后我们就可以愉快的跑 $Dijkstra$ 了。
不过在堆优化用到的结构体里面,要多加一个 $st$ 表示已经坐了 $st$ 次不要钱的航班了。
Code
1 |
|
总结
这种题一般都是一个套路问题,多做做题,就可以熟练掌握了呢~~